package com.gzyj.server.factory.jtt808.up;

import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.serializer.SerializerFeature;
import com.gzyj.data.common.VehicleIncrement;
import com.gzyj.data.jtt808.up.TerminalUpRegisterMsg;
import com.gzyj.jtt808.v2013.HeaderMsgBodyProperty;
import com.gzyj.jtt808.v2013.enums.BusinessDataType;
import com.gzyj.jtt808.v2013.enums.TerminalRegisterResult;
import com.gzyj.jtt808.v2013.protocol.JTT808_0x8100;
import com.gzyj.server.config.LogConfig;
import com.gzyj.server.factory.CommonHandler;
import com.gzyj.server.utils.TimeUtils;
import io.netty.channel.ChannelHandlerContext;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.kafka.core.KafkaTemplate;
import org.springframework.stereotype.Component;

/**
 * @author lhj
 */

@Component
public class JTT808_0x0100_Handler implements CommonHandler {


    @Value("${jtt808.KafkaUpTopic}")
    private String KafkaUpTopic;

    @Autowired
    private KafkaTemplate<String, Object> kafkaTemplate;


    @Override
    public void handler(ChannelHandlerContext ctx, com.gzyj.jtt808.v2013.Package msg) {
        com.gzyj.jtt808.v2013.protocol.JTT808_0x0100 jtt808_0x0100 = (com.gzyj.jtt808.v2013.protocol.JTT808_0x0100) msg;
        TerminalUpRegisterMsg registerMsg = new TerminalUpRegisterMsg();
        registerMsg.setGetTime(TimeUtils.getNow());

        registerMsg.setIpAddress(jtt808_0x0100.getPackageHeader().getTerminalPhoneNo());
        registerMsg.setCmdID(jtt808_0x0100.getPackageHeader().getMsgId());
        registerMsg.setProvincialId(jtt808_0x0100.getAreaID());
        registerMsg.setCityId(jtt808_0x0100.getCityOrCountyId());
        registerMsg.setManufacturerId(jtt808_0x0100.getMakerId());
        registerMsg.setTerminaModel(jtt808_0x0100.getTerminalModel());
        registerMsg.setTerminalId(jtt808_0x0100.getTerminalId());
        registerMsg.setVehNumberColor(jtt808_0x0100.getPlateColor() != null ? jtt808_0x0100.getPlateColor().getName() : null);
        registerMsg.setPlateNo(jtt808_0x0100.getPlateNo());

        JTT808_0x8100 jtt808_0x8100 = new JTT808_0x8100();
        HeaderMsgBodyProperty headerMsgBodyProperty = new HeaderMsgBodyProperty();
        headerMsgBodyProperty.setSubcontract(jtt808_0x0100.getPackageHeader().getMsgBodyProperty().isSubcontract());
        headerMsgBodyProperty.setEncryptMethod(jtt808_0x0100.getPackageHeader().getMsgBodyProperty().getEncryptMethod());
        jtt808_0x8100.getPackageHeader().setMsgBodyProperty(headerMsgBodyProperty);
        jtt808_0x8100.getPackageHeader().setTerminalPhoneNo(jtt808_0x0100.getPackageHeader().getTerminalPhoneNo());

        jtt808_0x8100.setAckMsgNum(jtt808_0x0100.getPackageHeader().getMsgNum());
        jtt808_0x8100.setTerminalRegisterResult(TerminalRegisterResult.成功);
        jtt808_0x8100.setCode("123456");

        ctx.writeAndFlush(jtt808_0x8100.encode());
        ctx.flush();
        kafkaTemplate.send(KafkaUpTopic, "KafkaUpTopic", JSON.toJSONString(registerMsg, SerializerFeature.DisableCircularReferenceDetect));

        LogConfig.commondLog.info("808 2019版 {} 指令 解析完成", BusinessDataType.find(jtt808_0x0100.getPackageHeader().getMsgId()));
    }

    @Override
    public void handler(ChannelHandlerContext ctx, com.gzyj.jtt808.v2019.Package msg) {
        com.gzyj.jtt808.v2019.protocol.JTT808_0x0100 jtt808_0x0100 = (com.gzyj.jtt808.v2019.protocol.JTT808_0x0100) msg;
        TerminalUpRegisterMsg registerMsg = new TerminalUpRegisterMsg();
        registerMsg.setGetTime(TimeUtils.getNow());

        registerMsg.setIpAddress(jtt808_0x0100.getPackageHeader().getTerminalPhoneNo());
        registerMsg.setCmdID(jtt808_0x0100.getPackageHeader().getMsgId());
        registerMsg.setProvincialId(jtt808_0x0100.getAreaID());
        registerMsg.setCityId(jtt808_0x0100.getCityOrCountyId());
        registerMsg.setManufacturerId(jtt808_0x0100.getMakerId());
        registerMsg.setTerminaModel(jtt808_0x0100.getTerminalModel());
        registerMsg.setTerminalId(jtt808_0x0100.getTerminalId());
        registerMsg.setVehNumberColor(jtt808_0x0100.getPlateColor() != null ? jtt808_0x0100.getPlateColor().getName() : null);
        registerMsg.setPlateNo(jtt808_0x0100.getPlateNo());

        com.gzyj.jtt808.v2019.protocol.JTT808_0x8100 jtt808_0x8100 = new com.gzyj.jtt808.v2019.protocol.JTT808_0x8100();
        com.gzyj.jtt808.v2019.HeaderMsgBodyProperty headerMsgBodyProperty = new com.gzyj.jtt808.v2019.HeaderMsgBodyProperty();
        headerMsgBodyProperty.setSubcontract(jtt808_0x0100.getPackageHeader().getMsgBodyProperty().isSubcontract());
        headerMsgBodyProperty.setEncryptMethod(jtt808_0x0100.getPackageHeader().getMsgBodyProperty().getEncryptMethod());
        headerMsgBodyProperty.setVersionFlag(jtt808_0x0100.getPackageHeader().getMsgBodyProperty().isVersionFlag());
        jtt808_0x8100.getPackageHeader().setMsgBodyProperty(headerMsgBodyProperty);
        jtt808_0x8100.getPackageHeader().setTerminalPhoneNo(jtt808_0x0100.getPackageHeader().getTerminalPhoneNo());
        jtt808_0x8100.getPackageHeader().setProtocolVersion(jtt808_0x0100.getPackageHeader().getProtocolVersion());

        jtt808_0x8100.setAckMsgNum(jtt808_0x0100.getPackageHeader().getMsgNum());
        jtt808_0x8100.setTerminalRegisterResult(TerminalRegisterResult.成功);
        jtt808_0x8100.setCode("123456");

        ctx.writeAndFlush(jtt808_0x8100.encode());
        ctx.flush();
        kafkaTemplate.send(KafkaUpTopic, "KafkaUpTopic", JSON.toJSONString(registerMsg, SerializerFeature.DisableCircularReferenceDetect));
        LogConfig.commondLog.info("808 2013版 {} 指令 解析完成", BusinessDataType.find(jtt808_0x0100.getPackageHeader().getMsgId()));


    }

    @Override
    public void handler(ChannelHandlerContext ctx, com.gzyj.jtt808.v2011.Package msg) {
        com.gzyj.jtt808.v2011.protocol.JTT808_0x0100 jtt808_0x0100 = (com.gzyj.jtt808.v2011.protocol.JTT808_0x0100) msg;
        TerminalUpRegisterMsg registerMsg = new TerminalUpRegisterMsg();
        registerMsg.setGetTime(TimeUtils.getNow());

        registerMsg.setIpAddress(jtt808_0x0100.getPackageHeader().getTerminalPhoneNo());
        registerMsg.setCmdID(jtt808_0x0100.getPackageHeader().getMsgId());
        registerMsg.setProvincialId(jtt808_0x0100.getAreaID());
        registerMsg.setCityId(jtt808_0x0100.getCityOrCountyId());
        registerMsg.setManufacturerId(jtt808_0x0100.getMakerId());
        registerMsg.setTerminaModel(jtt808_0x0100.getTerminalModel());
        registerMsg.setTerminalId(jtt808_0x0100.getTerminalId());
        registerMsg.setVehNumberColor(jtt808_0x0100.getPlateColor() != null ? jtt808_0x0100.getPlateColor().getName() : null);
        registerMsg.setPlateNo(jtt808_0x0100.getPlateNo());

        com.gzyj.jtt808.v2011.protocol.JTT808_0x8100 jtt808_0x8100 = new com.gzyj.jtt808.v2011.protocol.JTT808_0x8100();
        com.gzyj.jtt808.v2011.HeaderMsgBodyProperty headerMsgBodyProperty = new com.gzyj.jtt808.v2011.HeaderMsgBodyProperty();
        headerMsgBodyProperty.setSubcontract(jtt808_0x0100.getPackageHeader().getMsgBodyProperty().isSubcontract());
        headerMsgBodyProperty.setEncryptMethod(jtt808_0x0100.getPackageHeader().getMsgBodyProperty().getEncryptMethod());
        jtt808_0x8100.getPackageHeader().setMsgBodyProperty(headerMsgBodyProperty);
        jtt808_0x8100.getPackageHeader().setTerminalPhoneNo(jtt808_0x0100.getPackageHeader().getTerminalPhoneNo());

        jtt808_0x8100.setAckMsgNum(jtt808_0x0100.getPackageHeader().getMsgNum());
        jtt808_0x8100.setTerminalRegisterResult(TerminalRegisterResult.成功);
        jtt808_0x8100.setCode("123456");

        ctx.writeAndFlush(jtt808_0x8100.encode());
        ctx.flush();
        kafkaTemplate.send(KafkaUpTopic, "KafkaUpTopic", JSON.toJSONString(registerMsg, SerializerFeature.DisableCircularReferenceDetect));
        LogConfig.commondLog.info("808 2011版 {} 指令 解析完成", BusinessDataType.find(jtt808_0x0100.getPackageHeader().getMsgId()));
    }

    @Override
    public void handler(VehicleIncrement vehicleInfo, String msg) {

    }

}
